unit CaixaInicioRecordFr;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, DBCtrls, ActnList, ComCtrls, ExtCtrls, Calendar,
  MainRecordFr;

type

  { TCaixaInicioRecordFrame }

  TCaixaInicioRecordFrame = class(TMainRecordFrame)
    Calendar: TCalendar;
    CancelarCaixa: TAction;
    DBLookupComboBox1: TDBLookupComboBox;
    IDCaixaEdit: TDBEdit;
    IDUsuarioDBEdit: TDBEdit;
    Label2: TLabel;
    Label6: TLabel;
    DBGroupBox1: TDBGroupBox;
    CaixaActionList: TActionList;
    ExcluirCaixa: TAction;
    FecharCaixa: TAction;
    InserirCaixa: TAction;
    Label1: TLabel;
    Label5: TLabel;
    Panel16: TPanel;
    Panel17: TPanel;
    SalvarCaixa: TAction;
    ToolBar1: TToolBar;
    ToolButton14: TToolButton;
    ToolButton16: TToolButton;
    ToolButton17: TToolButton;
    ToolButton18: TToolButton;
    ToolButton3: TToolButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    valorInicial: TDBText;
    procedure CancelarCaixaExecute(Sender: TObject);
    procedure DBLookupComboBox1Select(Sender: TObject);
    procedure FecharCaixaExecute(Sender: TObject);
    procedure ControlaBotoes(); override;
    procedure InserirCaixaExecute(Sender: TObject);
    procedure SalvarCaixaExecute(Sender: TObject);
    procedure Limpar();
  private
    { private declarations }
  public
    { public declarations }
    Verifica: boolean;
  end;

implementation

uses Initializator, MainFr, CaixaDM, MainDM, MainFm;

{ TCaixaInicioRecordFrame }

procedure TCaixaInicioRecordFrame.CancelarCaixaExecute(Sender: TObject);
begin
  // Verifica se o frame possui módulo de dados
  if (CaixaMovimentacaoData <> nil) then
    // Cancela as alterações no DataSet
    CaixaMovimentacaoData.CaixaMovZQuery.Cancel();
  DBLookupComboBox1.Enabled:=false;
  ControlaBotoes();
end;

procedure TCaixaInicioRecordFrame.DBLookupComboBox1Select(Sender: TObject);
begin
  if SalvarCaixa.Enabled = True then begin
     Verifica := CaixaMovimentacaoData.VerificaCaixaConta(DBLookupComboBox1.KeyValue);
    if (Verifica = False) then begin
      ShowMessage('Esta conta não pode abrir o Caixa! Escolha outra!');
    end;
  end;
end;

procedure TCaixaInicioRecordFrame.FecharCaixaExecute(Sender: TObject);
begin
  TheControl.BackFrame();
  DBLookupComboBox1.Enabled:=false;
  TheControl.ShowFrame(TMainFrame(CaixaFrame));
end;

procedure TCaixaInicioRecordFrame.ControlaBotoes();
var
  I: integer;
begin
  // Desabilita todas as ações
  for I := 0 to RecordActionList.ActionCount - 1 do begin
    TAction(RecordActionList.Actions[I]).Enabled := False;
  end;
  for I := 0 to CaixaActionList.ActionCount - 1 do begin
    TAction(CaixaActionList.Actions[I]).Enabled := False;
  end;
  RecordDBNavigator.Enabled := False;
  // Verifica se o frame possui módulo de dados
  if (CaixaMovimentacaoData.DataSetState() = mdsDisable) then begin
    // Se não tiver desabilita todos os componentes
    for I := 0 to Self.ComponentCount - 1 do
      if Self.Components[I] is TControl then
        TControl(Self.Components[I]).Enabled := False;
  end else begin
    // Verifica se o DataSet está em modo de edição e controla habilitação das ações
    if (CaixaMovimentacaoData.DataSetState() in [mdsEditing, mdsInserting]) then begin
      SalvarCaixa.Enabled := True;
      CancelarCaixa.Enabled := True;
    end else begin
      InserirCaixa.Enabled := True;
      FecharCaixa.Enabled := True;
    end;
  end;
end;

procedure TCaixaInicioRecordFrame.InserirCaixaExecute(Sender: TObject);
var
  Caixa: string;
begin
  // Verifica se o frame possui módulo de dados
  if (CaixaMovimentacaoData <> nil) then begin
    Caixa := CaixaMovimentacaoData.VerificaCaixaAberto();
    if (Caixa <> '') then begin
      ShowMessage('O Caixa já foi Aberto!');
      FecharCaixaExecute(Sender);
    end else begin
      Limpar();
      DBLookupComboBox1.Enabled:=true;
      CaixaMovimentacaoData.CaixaMovZQuery.Insert();
      Calendar.Date := CaixaMovimentacaoData.BuscaData();
      CaixaMovimentacaoData.CaixaMovZQuery.FieldByName('id_usuario').AsInteger :=
        MainForm.Usuario;
    end;
    ControlaBotoes();
  end;
end;

procedure TCaixaInicioRecordFrame.SalvarCaixaExecute(Sender: TObject);
begin
  if Verifica = True then begin
    CaixaMovimentacaoData.CaixaMovZQuery.Post();
    DBLookupComboBox1.Enabled:=false;
    Limpar();
    ControlaBotoes();
  end else begin
    ShowMessage('Esta conta não pode Abrir o Caixa!');
  end;
end;

procedure TCaixaInicioRecordFrame.Limpar();
begin
  valorInicial.Caption := '';
end;

initialization
  {$I caixainiciorecordfr.lrs}

end.
